﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace IBLL
{

        #region 通用CRUD接口
        public interface ILinqCRUD<T, PK>
        {

            /// <summary> 
            /// 创建实体信息
            /// </summary> 
            /// <param name="entity">实体</param> 
            /// <returns></returns> 
            void Create(T entity);

            /// <summary> 
            /// 读取实例信息 
            /// </summary> 
            /// <param name="Id">实体编号</param> 
            /// <returns></returns> 
            T Load(PK Id);

            /// <summary> 
            /// 更新实体信息 
            /// </summary> 
            /// <param name="entity">实体</param> 
            /// <returns></returns> 
            void Update(T entity);

            /// <summary> 
            /// 删除实体 
            /// </summary> 
            /// <param name="Id">实体编号</param> 
            /// <returns></returns> 
            void Delete(PK Id);

            /// <summary> 
            /// 删除实体
            /// </summary> 
            /// <param name="entity">实体</param> 
            /// <returns></returns> 
            void Delete(T entity);
        }
        #endregion

        #region 操作机配置表
        public interface IPos
        {
            //根据机器名检测是否可以登录
            DataTable CheckMachine(string CName);
        }
        #endregion

        #region 操作用户配置表
        public interface IOper
        {
            //根据操作者部门，操作编号和密码得到操作者信息
            DataTable GetOper(string OperId, string DepId, string Passwd);
        }
        #endregion

        #region 统计类型配置表
        public interface IType
        {
            #region 统计类型一
            //根据编码查询统计类型一
            MisModel.Type GetType1ById(string TpId);

            //查询统计类型一
            DataTable GetType1();

            //添加统计类型一
            int AddType1(MisModel.Type obj);

            //修改统计类型一
            int UpdateType1(MisModel.Type obj);

            //根据ID删除统计类型一
            int DeleteType1(string id);
            #endregion

            #region 统计类型二
            //根据编码查询统计类型二
            MisModel.Type GetType2ById(string TpId);

            //查询统计类型二
            DataTable GetType2();

            //添加统计类型二
            int AddType2(MisModel.Type obj);

            //修改统计类型二
            int UpdateType2(MisModel.Type obj);

            //根据ID删除统计类型二
            int DeleteType2(string id);
            #endregion

            #region 统计类型三
            //根据编码查询统计类型三
            MisModel.Type GetType3ById(string TpId);

            //查询统计类型三
            DataTable GetType3();

            //添加统计类型三
            int AddType3(MisModel.Type obj);

            //修改统计类型三
            int UpdateType3(MisModel.Type obj);

            //根据ID删除统计类型三
            int DeleteType3(string id);
            #endregion
        }
        #endregion

        #region 部门信息配置表
        public interface IDepart
        {
            //根据编码查询部门信息
            MisModel.Depart GetById(string depId);

            //查询部门列表
            DataTable GetAll();

            //添加部门信息
            int Add(MisModel.Depart obj);

            //修改部门信息
            int Update(MisModel.Depart obj);

            //根据ID删除部门信息
            int Delete(string id);
        }
        #endregion

        #region 供应商进货类型配置表
        public interface IJhType
        {
            //根据编码查询供应商进货类型信息
            MisModel.JHType GetById(string id);

            //查询供应商进货类型列表
            DataTable GetAll();

            //添加供应商进货类型信息
            int Add(MisModel.JHType obj);

            //修改供应商进货类型信息
            int Update(MisModel.JHType obj);

            //根据ID删除供应商进货类型信息
            int Delete(string id);
        }
        #endregion

        #region 客户结算类型配置表
        public interface IFkType
        {
            //根据编码查询客户结算类型信息
            MisModel.FKType GetById(string id);

            //查询客户结算类型列表
            DataTable GetAll();
            IList<MisEntity.FKType> FindAll();

            //添加客户结算类型信息
            int Add(MisModel.FKType obj);

            //修改客户结算类型信息
            int Update(MisModel.FKType obj);

            //根据ID删除客户结算类型信息
            int Delete(string id);
        }
        #endregion

        #region 客户结算周期配置表
        public interface IDayJS
        {
            //根据编码查询客户结算周期信息
            MisModel.DayJs GetById(string id);

            //查询客户结算周期列表
            DataTable GetAll();

            //添加客户结算周期信息
            int Add(MisModel.DayJs obj);

            //修改客户结算周期信息
            int Update(MisModel.DayJs obj);

            //根据ID删除客户结算周期信息
            int Delete(string id);
        }
        #endregion

        #region 包装单位配置表
        public interface IUnit
        {
            //根据编码查询包装单位信息
            MisModel.Unit GetById(string id);

            //查询包装单位列表
            DataTable GetAll();

            //添加包装单位信息
            int Add(MisModel.Unit obj);

            //修改包装单位信息
            int Update(MisModel.Unit obj);

            //根据ID删除包装单位信息
            int Delete(string id);
        }
        #endregion

        #region 支付工具配置表
        public interface ICard
        {
            //根据编码查询支付工具信息
            MisModel.Card GetById(string id);

            //查询支付工具列表
            DataTable GetAll();

            //添加支付工具信息
            int Add(MisModel.Card obj);

            //修改支付工具信息
            int Update(MisModel.Card obj);

            //根据ID删除支付工具信息
            int Delete(string id);
        }
        #endregion

        #region 库位配置表
        public interface IArea
        {
            //根据编码查询库位信息
            MisModel.Area GetById(string id);

            //查询库位列表
            DataTable GetAll();

            //添加库位信息
            int Add(MisModel.Area obj);

            //修改库位信息
            int Update(MisModel.Area obj);

            //根据ID删除库位信息
            int Delete(string id);
        }
        #endregion

        #region 客户部门代码配置表
        public interface ICusDep
        {
            //根据编码查询客户部门代码信息
            MisModel.CusDep GetById(string id);

            //根据编码查询客户部门代码信息
            MisModel.CusDep GetBy(string id, string dep);

            //查询客户部门代码列表
            DataTable GetAll();
            IList<MisEntity.CusDep> FindAll();

            //根据客户ID查询所属部门
            IList<MisEntity.CusDep> FindBy(string CustID);

            //添加客户部门代码信息
            int Add(MisModel.CusDep obj);

            //修改客户部门代码信息
            int Update(MisModel.CusDep obj);

            //根据ID删除客户部门代码信息
            int Delete(string id);
        }
        #endregion

        #region 客户分店代码配置表
        public interface ICusShop
        {
            //根据编码查询客户分店代码信息
            MisModel.CusShop GetById(string id);

            //根据编码查询客户分店代码信息
            MisModel.CusShop GetBy(string id, string shop);

            //查询客户分店代码列表
            DataTable GetAll();
            IList<MisEntity.CusShop> FindAll();
            //根据客户ID查询所属分店
            IList<MisEntity.CusShop> FindBy(string CustID);

            //添加客户分店代码信息
            int Add(MisModel.CusShop obj);

            //修改客户分店代码信息
            int Update(MisModel.CusShop obj);

            //根据ID删除客户分店代码信息
            int Delete(string id);
        }
        #endregion

        #region 客户档案配置表
        public interface ICustomer
        {
            //得到最后最大的ID
            int FindLastId();

            //根据编码查询客户档案信息
            MisModel.Customer GetById(string id);
            MisEntity.Customer Load(string Id);

            //根据名称查询客户档案信息
            DataTable GetByName(string name);

            //查询业务员信息
            IList<MisEntity.Customer> FindBusinessMan();
            IList<MisEntity.Customer> FindBusinessMan1();

            //查询客户档案列表
            DataTable GetAll();
            IList<MisEntity.Customer> FindAll();

            //添加客户档案信息
            int Add(MisModel.Customer obj);

            //修改客户档案信息
            int Update(MisModel.Customer obj);

            //根据ID删除客户档案信息
            int Delete(string id);
        }
        #endregion

        #region 商品档案配置表
        public interface IGoods : ILinqCRUD<MisEntity.Goods, string>
        {
            //根据编码查询商品档案信息
            MisEntity.Goods Load(string Id);

            //根据尾号4位至6位编码查询商品档案信息
            MisEntity.Goods EndsWithID(string ID);

            //查询商品档案列表
            MisEntity.Goods FindByDM(string DM);

            //根据商品编码和内部编码查询商品档案
            MisEntity.Goods FindByCode(string Code);

            //查询商品档案列表
            DataTable GetAll();

            //添加商品档案信息
            int Add(MisModel.Goods obj);

            //修改商品档案信息
            int Update(MisModel.Goods obj);

            //根据ID删除商品档案信息
            int Delete1(string id);

            //获取无销售商品库存查询数据
            DataTable GetGoodsEnquiriesAll(string sql, string sql1, string tableName, Dictionary<string, object> dictionary);

            //获取表数据
            DataTable getTableData(string tableName);

            //获取库存查询数据
            DataTable GetStockEnquiriesAll(string sql, string tableName, Dictionary<string, object> dictionary);

            //获取库存统计数据
            DataTable GetStockStatisticsAll(string sql, Dictionary<string, object> dictionary, string tjType, String tableName);

            //商品价格设置查询
            DataTable GetGoodsAll(string sql, Dictionary<string, object> dictionary, string tjType);

            //商品价格设置查询2
            DataTable GetGoodsAll2(string sql, Dictionary<string, object> dictionary, string tjType);

            //商品价格设置
            void saveGoodsPrice(IList<MisEntity.Goods> list, string cusId, string cusDep);
        }
        #endregion

        #region 供应商配置表
        public interface ISupply
        {
            //根据编码查询供应商信息
            MisModel.Supply GetById(string id);

            //根据名称查询供应商信息
            DataTable GetByName(string name);

            //查询供应商列表
            DataTable GetAll();

            //添加供应商信息
            int Add(MisModel.Supply obj);

            //修改供应商信息
            int Update(MisModel.Supply obj);

            //根据ID删除供应商信息
            int Delete(string id);
        }
        #endregion

        #region 钱款用途配置表
        public interface IYT
        {
            //根据编码查询钱款用途信息
            MisModel.YT GetById(string id);

            //查询钱款用途列表
            DataTable GetAll();

            //添加钱款用途信息
            int Add(MisModel.YT obj);

            //修改钱款用途信息
            int Update(MisModel.YT obj);

            //根据ID删除钱款用途信息
            int Delete(string id);
        }
        #endregion

        #region 进货入库配置表
        public interface IBacf
        {
            //进货入库
            void Insert(IList<MisEntity.Bacf> list);

            //获取进化查询数据
            DataTable GetEnquiriesAll(string sql, Dictionary<string, object> dictionary);

            //获取进货统计数据
            DataTable GetStatisticsAll(string sql, Dictionary<string, object> dictionary, string tjType); 

            //获取进退货查询数据
            DataTable GetJtEnquiriesAll(string sql, Dictionary<string, object> dictionary);
        }
        #endregion

        #region SYS0配置表
        public interface ISys0
        {
            //获取进货单号
            string GetNoBac();

            //获取退货单号
            string GetNoRac();

            //获取批发销售单号
            string GetNoSac();
        }
        #endregion

        #region 退货出库配置表
        public interface IRacf
        {
            //退货出库
            void Insert(MisEntity.Rac entity, IList<MisEntity.Racf> list);

            //移库
            void Move(IList<MisEntity.Racf> list, string Shop1, string Shop2);

            //获取退货查询数据
            DataTable GetEnquiriesAll(string sql, Dictionary<string, object> dictionary);

            //获取退货统计数据
            DataTable GetStatisticsAll(string sql, Dictionary<string, object> dictionary, string tjType);
        }
        #endregion

        #region 仓库配置表
        public interface IShop : ILinqCRUD<MisEntity.Shop, string>
        {
            //根据仓库编号查询信息
            MisEntity.Shop GetId(string shopId);

            //查询仓库列表
            IList<MisEntity.Shop> GetAll();
        }
        #endregion


        #region 商品客户配置表
        public interface IGoodsCus : ILinqCRUD<MisEntity.GoodsCus, string>
        {
            //查询商品客户列表
            IList<MisEntity.GoodsCus> FindAll();

            //查询商品客户列表
            MisEntity.GoodsCus Find(string CusID, string ID);
        }
        #endregion


        #region 批发销售配置表
        public interface ISacf
        {
            //批发销售出库
            void Insert(IList<MisEntity.Sacf> list);

            //提货确认
            void Confirm(IList<MisEntity.Sacf> list);

            //查询批发列表
            IList<MisEntity.Sacf> FindAll(string No, String DepId);
            IList<MisEntity.Sacf> FindAll(string No);

            //获取开发票中的商品数据
            DataTable GetAll(string No);

            //开票
            string Billing(MisEntity.Invoice L_Invoice, IList<MisEntity.Sacf> list);

            //获取销售和商品数据
            DataTable GetAll(string sql, Dictionary<string, object> dictionary);

            //获取已开票的销售数据
            DataTable GetBillingAll(string sql, Dictionary<string, object> dictionary);

            //取消发票
            void clearBilling(IList<MisEntity.Sacf> list);

            //获取到款确认的销售数据
            DataTable GetArticleAll(string sql, Dictionary<string, object> dictionary);

            //获取到款确认的销售数据(发票)
            DataTable GetArticleNoAll(string sql, Dictionary<string, object> dictionary);

            //获取到款确认中的商品数据
            DataTable GetArticleGoodsAll(string No);

            //到款确认
            void Article(IList<MisEntity.Sacf> list);

            //废弃发票
            void discardBilling(IList<MisEntity.Sacf> list);

            //获取批销业务进程数据
            DataTable GetVolumeAll(string sql, Dictionary<string, object> dictionary);

            //获取单据结算数据
            DataTable GetDocumentsAll(string sql, Dictionary<string, object> dictionary);

            //获取备查薄数据
            DataTable GetRecordationAll(string sql, Dictionary<string, object> dictionary);

            //获取销售查询数据
            DataTable GetEnquiriesAll(string sql, Dictionary<string, object> dictionary, string linker, string linker1);

            //获取销售单据汇总数据
            DataTable GetEnquiriesStatisticsAll(string sql, Dictionary<string, object> dictionary, string linker, string linker1);

            //获取销售查询数据
            DataTable GetStatisticsAll(string sql, Dictionary<string, object> dictionary, string tjType, string linker1);

            //获取销售排行榜统计数据
            DataTable GetRankingAll(string sql, Dictionary<string, object> dictionary, string tjType, String order);
        }
        #endregion

        #region 发票配置表
        public interface IInvoice
        {
            //批发销售出库
            string Insert(MisEntity.Invoice L_Invoice);
        }
        #endregion

    
}
